package main

import (
	"fmt"
)

func main() {
	//scanln 则遇到回车就终止输入了  而且不能接受中间有空格 否则输出就有问题
	//但是可以连续回车接收参数 对于一步一步设置配置时可以用这个
	strBaiduUsername := ""
	strBaiduPassword := ""
	_, err1 := fmt.Scanln(&strBaiduUsername)
	if nil == err1 {
		fmt.Printf("strBaiduUsername=%s\n", strBaiduUsername)
	}
	_, err2 := fmt.Scanln(&strBaiduPassword)
	if nil == err2 {

		fmt.Printf("strBaiduPassword=%s\n", strBaiduPassword)
	}
	/*
		输出结果
		D:\Go\go_example\org\fmt\scan>go run scanf.go
		aa
		strBaiduUsername=aa
		111
		strBaiduPassword=111
	*/

	fmt.Println("===============================")

	//scan 当参数还有时 回车后仍然让输入 并且可以接收空格 所有参数接收完毕 后才打印
	var i, j, k, z string
	fmt.Scan(&i, &j, &k)
	fmt.Println(i, j, k)
	fmt.Println("===============================")
	fmt.Scan(&z)
	/*
		输出结果
		===============================
		aa dd ff
		aa dd ff
		===============================
		ddd fff <--这是一次性输入的带空格的  而不是输入两次
	*/

	//还有几个具有通用作用接收输入的函数
	//os.Stdin.Read(input) 这个不存在空格限制 不过这个会规定空间大小
	//bufio.NewReader(os.Stdin)
	//ioutil.ReadAll(os.Stdin)

	//简单例子
	// version 1
	//reader := bufio.NewReader(os.Stdin)
	//input, _ := reader.ReadBytes('\n')
	//println(string(input[0 : len(input)-1])) // string(input[0:len(input)-1]) remove '\n'.

	////version 2
	////blocke util you press Ctrl+d	//从这个注释来看应该是Ctrl+d结束输入 但是我在windows下go1.3环境时 不好使 还是一直让输入 其他两个都是回车就结束输入
	//input, _ := ioutil.ReadAll(os.Stdin)
	//println(string(input[0 : len(input)-1]))

	//// version 3
	////var input []byte
	//input := make([]byte, 1024)
	//length, _ := os.Stdin.Read(input)
	//println(string(input[0 : length-1]))
	//println(length)
}
